Wstęp

Postanowiłem zebrać dane dotyczące platformy Ethereum dostępne na stronie etherscan oraz przeprowadzić na nich szereg analiz.

Ethereum jest zdecentralizowaną platformą do tworzenia i uruchamiania smart contractów i aplikacji, wykorzystującą technologię blockchain. Wszystkie operacje obsługiwane są przez EVM (Ethereum Virtual Machine) oraz wiąża się z opłatą (za moc obliczneiową) dla górników nazywaną gas fee. Gas jest wyceniany w systemie rynkowym w jednostkach Gwei (\(10^-9\) ETH).

Na platformie istnieją i wciąż powstają nowe dane, które można by poddać analizie, ale postanowiłem skupić się na tych podstawowych nie wchodząc głębiej. Wszystkie dane są w postaci numerycznych szeregów czasowych o interwale dniowym, oto ich przykłady

i inne.

Przygotowywanie danych

Pominę cały proces pobierania oddzielnych plikow .csv z danymi ze strony podanej we wstępie oraz łączenia ich w jeden dataset. Zamiast tego wczytam przygotowany przeze mnie wcześniej plik.

ethdata <- read.csv(file = 'EtherscanDataCombined.csv', check.names=FALSE)
ethdata$Date <- as.Date(as.POSIXct(ethdata$UnixTimeStamp, origin="1970-01-01"))
rownames(ethdata) <- ethdata$Date
pander(summary(ethdata))
Table continues below
UnixTimeStamp Average Txn Fee (USD)
Min. : 1.0 Min. :1.438e+09 Min. : 0.000
1st Qu.: 685.5 1st Qu.:1.497e+09 1st Qu.: 0.080
Median :1370.0 Median :1.556e+09 Median : 0.270
Mean :1370.0 Mean :1.556e+09 Mean : 4.532
3rd Qu.:2054.5 3rd Qu.:1.616e+09 3rd Qu.: 2.930
Max. :2739.0 Max. :1.675e+09 Max. :200.060
Table continues below
Average Txn Fee (Ether) No. of ERC20 Token Transfers AvgBlockSize (Bytes)
Min. :0 Min. : 0 Min. : 575
1st Qu.:0 1st Qu.: 22762 1st Qu.: 7766
Median :0 Median : 400702 Median : 22895
Mean :0 Mean : 411163 Mean : 31972
3rd Qu.:0 3rd Qu.: 686906 3rd Qu.: 45880
Max. :0 Max. :1475639 Max. :127467
Table continues below
AvgBlockTime (Secs) AvgGasLimit AvgGasPrice (Wei) DailyNewBlocks
Min. : 4.46 Min. : 0 Min. :0.000e+00 Min. :2829
1st Qu.:13.17 1st Qu.: 4714969 1st Qu.:1.610e+10 1st Qu.:5865
Median :13.73 Median : 8001406 Median :2.374e+10 Median :6179
Mean :14.40 Mean :12128076 Mean :4.580e+10 Mean :6025
3rd Qu.:14.49 3rd Qu.:12492976 3rd Qu.:5.429e+10 3rd Qu.:6454
Max. :30.31 Max. :30076835 Max. :9.396e+11 Max. :7180
Table continues below
Unique Address Total Count Unique Address Receive Count
Min. : 0 Min. : 0
1st Qu.: 106547 1st Qu.: 60456
Median : 283631 Median : 201090
Mean : 282641 Mean : 205716
3rd Qu.: 449777 3rd Qu.: 341964
Max. :1420187 Max. :1356170
Table continues below
Unique Address Sent Count ERC20 Unique Address Total Count
Min. : 0 Min. : 0
1st Qu.: 88862 1st Qu.: 13372
Median :174279 Median : 205496
Mean :171222 Mean : 174140
3rd Qu.:253346 3rd Qu.: 262415
Max. :603855 Max. :1376408
Table continues below
ERC20 Unique Address Receive Count ERC20 Unique Address Sent Count MiningRewards (ETH)
Min. : 0 Min. : 0 Min. : 0
1st Qu.: 10800 1st Qu.: 4784 1st Qu.:13493
Median : 169501 Median : 85879 Median :13719
Mean : 143672 Mean : 82409 Mean :18388
3rd Qu.: 215335 3rd Qu.:133130 3rd Qu.:25599
Max. :1320810 Max. :364358 Max. :39316
Table continues below
TotalGasUsed EtherPrice (USD) TotalTransactions TotalEthSupply
Min. :0.000e+00 Min. : 0.0 Min. : 0 Min. : 72049307
1st Qu.:1.140e+10 1st Qu.: 109.0 1st Qu.: 217207 1st Qu.: 92475557
Median :4.238e+10 Median : 267.4 Median : 699093 Median :105866218
Mean :4.841e+10 Mean : 809.7 Mean : 677068 Mean :102845833
3rd Qu.:7.992e+10 3rd Qu.:1231.3 3rd Qu.:1109189 3rd Qu.:115045882
Max. :1.101e+11 Max. :4811.0 Max. :1932711 Max. :122373635
Table continues below
MarketCap (mln USD) AvgNetworkDifficulty (TH) AvgNetworkHashRate (GH/s)
Min. : 0 Min. : 0 Min. : 0
1st Qu.: 11278 1st Qu.: 112 1st Qu.: 8309
Median : 27474 Median : 2321 Median : 178145
Mean : 93516 Mean : 3453 Mean : 265982
3rd Qu.:148340 3rd Qu.: 3508 3rd Qu.: 283688
Max. :568966 Max. :15101 Max. :1126674
Table continues below
NetworkTxnFee (ETH) NetworkUtilization (1=100%) TotalUncleBlocks
Min. :0.000e+00 Min. :0.0000 Min. : 0.0
1st Qu.:2.378e+20 1st Qu.:0.4034 1st Qu.: 320.0
Median :4.678e+20 Median :0.6755 Median : 381.0
Mean :1.658e+21 Mean :0.5902 Mean : 477.1
3rd Qu.:1.170e+21 3rd Qu.:0.8989 3rd Qu.: 477.5
Max. :4.276e+22 Max. :0.9915 Max. :2096.0
Date
Min. :2015-07-30
1st Qu.:2017-06-13
Median :2019-04-29
Mean :2019-04-29
3rd Qu.:2021-03-13
Max. :2023-01-27

Podstawowe charakterystyki oraz rozkłady

W przypadku szeregów czasowych analiza takich charakterystyk jak średnia, mediana czy kwantyle nie zawsze ma sens. Po przeanalizowaniu wyników oraz zagłębieniu się w sens każdej cechy, jedyne, dla których te wskaźniki wydają się mieć sens przeanalizuje poniżej.

AvgBlockTime (Secs)

Min. 1st Qu. Median Mean 3rd Qu. Max.
4.46 13.17 13.73 14.4 14.49 30.31

Jest to średni dla danego dnia czas w sekundach potrzebny do włączenia nowego bloku do blockchain’u Ethereum.

Z wykresu i charakterystyk wynika że średni czas potrzebny na powstanie nowego bloku wynosi 14.4s, mediana jest niewiele mniejsza i wynosi 13.17s. Wszystkie wartości zdają się oscylować blisko średniej i mediany, ale jest kilka okresów, w których czas ten znacząco sie wydłuża do momentu osiągniecia lokalnej wartości maksymalnej po czym bardzo szybko wraca do średniej.

Globalna wartość maksymalna wynosi 30.31s, jest ponad dwukrotnie większa od średniej i została osiągnięta we wrześniu 2017 roku. Najniższy czas został osiągnięty pierwszego dnia działania sieci, wynosił 4.46s i był dużo mniejszy niż średnia oraz każdy kolejny odczyt.

DailyNewBlocks

Min. 1st Qu. Median Mean 3rd Qu. Max.
2829 5865 6179 6025 6454 7180

Liczba codziennych nowych bloków w sieci Ethereum stale rosła w ciągu ostatnich kilku miesięcy. Średnio w całym okresie powstawało 6025 nowych bloków dziennie. Szczytową dzienną liczbę nowych bloków w sieci Ethereum odnotowano w grudniu 2022 r., kiedy to dodano ponad 7180 nowych bloków.

Widać odwrotną korelację z poprzednia cechą (AvgBlockTime), co jest logiczne gdyż doba ma 24 godziny a jeżeli średni czas stworzenia nowego bloku rośnie to ich ilość wytworzona w ciągu jednego dnia spadnie.

Stały wzrost liczby nowych bloków jest pozytywnym sygnałem dla sieci Ethereum, gdyż świadczy o rosnącym zapotrzebowaniu na usługi sieci i wzroście wykorzystania.

Average Txn Fee (USD)

Min. 1st Qu. Median Mean 3rd Qu. Max.
0 0.08 0.27 4.532 2.93 200.1

Średnia opłata transakcyjna w sieci Ethereum wahała się w ciągu ostatnich kilku miesięcy. Średnia opłata transakcyjna w USD z całego okresu wynosi $4.53. Jednak liczba ta znacznie różni się w zależności od zapotrzebowania na transakcje w sieci i ogólnego przeciążenia sieci.

Widać dużo wartości odstających co oznacza że w okresach dużego popytu średnia opłata transakcyjna przekracza kilkukrotnie średnią z całego okresu. Po za tymi okresami wartości oscylują wokół średniej. Największa średnia dniowa opłata na poziomie $200 miała miejsce w maju 2022, jest większa aż 44 razy od średniej wartości.

MiningRewards (ETH)

Min. 1st Qu. Median Mean 3rd Qu. Max.
0 13493 13719 18388 25599 39316

Cecha ta przedstawia ilość nowych ‘wykopanych’ dziennie przez górników Etherów, które stanowiły główne źródło podaży aktywa. Z wielu powodów m.in. ekologicznych wynikających z dużego żużycia energii przez sieć oraz wchłonięcia całej podaży kart graficznych na rynku, 15 września 2022 roku platforma Ethereum przeszła zmianę algorytmu konsensusu z PoW na PoS, gdzie nie ma nagród za kopanie, co widać na wykresie. Fakt ten może mieć wpływ na zaburzenie wsp. korealcji między cechami.

Najwyższa koncentracja nagród znajduje się wokół wartości mediany, a rozpiętość nagród maleje w miarę oddalania się od mediany. Wykres skrzypcowy wskazuje, że większość dziennych nagród blokowych w sieci Ethereum mieści się w pewnym zakresie, z niewielką liczbą nagród skrajnych. Wykres pokazuje, że było więcej bloków z wysokimi nagrodami niż blokami z niskimi nagrodami.

NetworkUtilization (1=100%)

Min. 1st Qu. Median Mean 3rd Qu. Max.
0 0.4034 0.6755 0.5902 0.8989 0.9915

Jest to wskaźnik reprezentujący średnie zużycie gazu powyżej limitu gazu w procentach. Zapewnia kompleksowy wgląd w ogólne wykorzystanie sieci Ethereum, w tym liczbę przetworzonych transakcji, ilość zużytego gazu i liczbę wdrożonych smart-contractów.

Z wykresu skrzypcowego można zauważyć, że wykorzystanie sieci w sieci Ethereum ma tendencję do wahań, z pewnymi okresami niskiego i średniego wykorzystania oraz długim okresem wysokiego wykorzystania, który skończył się w sierpniu 2021 roku. Po tym okresie sieć jest zużywana w stopniu trochę większym od wartości średniej wynoszącej 59%.

TotalUncleBlocks

Min. 1st Qu. Median Mean 3rd Qu. Max.
0 320 381 477.1 477.5 2096

Cecha TotalUncleBlocks pokazuje całkowitą dzienną liczbę wygenerowanych bloków w sieci Ethereum, które są uważane za bloki Uncle. Blok Uncle to blok, który jest wydobywany i włączany do łańcucha bloków, ale nie jest włączany do głównego łańcucha. Zamiast tego staje się częścią alternatywnego łańcucha, znanego jako łańcuch Uncle. Bloki Uncle powstają, gdy dwóch(lub więcej) górników generuje blok mniej więcej w tym samym czasie, co prowadzi do jednoczesnego wydobywania i rozgłaszania wielu bloków w sieci. Sieć Ethereum zazwyczaj wybiera blok z najwyższym dowodem pracy do włączenia do głównego łańcucha, podczas gdy inne bloki stają się blokami Uncle.

Powyżej 3ciego kwantyla widać bardzo dużą rozpiętość przyjmowanych wartości co wskazuje na okresy duzej rywalizacji między górnikami o dodawanie bloków do łańcucha bloków, natomiast niska wartość mediany i niewielki rozstęp między wartościami pierwszego i trzeciego kwartyla mogą wskazywać na bardziej scentralizowany proces wydobywania z mniejszą liczbą górników. Wartość minimalna jest ‘przekłamana’ przez zmiane algorytmu konsensusu po wrześniu 2022.

Analiza trendu i sezonowości

Analiza trendu i sezonowości jest ważnym krokiem w analizie szeregów czasowych, ponieważ pozwala uzyskać lepsze zrozumienie wzorców w danych. Trend oznacza długoterminową tendencję w danych, podczas gdy sezonowość odnosi się do powtarzających się wzorców, które występują w określonych porach roku.

for (col in names(ethdata)[-1]) {
  current_plot <- ethdata %>%
    select(Date, col)
  if (col != "Date") {
    current_plot <- current_plot %>%
      set_names(c("date", "value"))
    plot <- current_plot %>%
    plot_time_series(date, value, .smooth_period = 365)
    print(plot)
  }
}
## Warning: Using an external vector in selections was deprecated in tidyselect 1.1.0.
## ℹ Please use `all_of()` or `any_of()` instead.
##   # Was:
##   data %>% select(col)
## 
##   # Now:
##   data %>% select(all_of(col))
## 
## See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.

Badanie korelacji i autokorelacji

W tym rozdziale można zbadac, czy istnieją zależności między poszczególnymi zmiennymi w danych, a także jakie są wartości autokorelacji w danych. Można wykorzystać wykresy korelacji i współczynników autokorelacji do przedstawienia wyników.

Analiza stacjonarności

W tym rozdziale można sprawdzić, czy dane są stacjonarne i jakie są konsekwencje dla dalszej analizy.

Modelowanie szeregów czasowych

W tym rozdziale można opisać, jakie modele szeregów czasowych zostały wykorzystane do prognozowania danych.

Prognozy i ich ocena

W tym rozdziale można przedstawić prognozy i ocenić ich jakość.

Podsumowanie i wnioski

W tym ostatnim rozdziale można podsumować główne wnioski z analizy i pokazać, jakie dalsze badania można przeprowadzić.